import { localStg } from './storage';

/**
 * 页面访问统计工具
 */
export class PageStats {
  private static readonly STORAGE_KEY = 'page_visit_stats';

  /**
   * 记录页面访问
   * @param pagePath 页面路径，如 "/pages/index/index" 或 "/pinggu/index"
   */
  static recordPageVisit(pagePath: string): void {
    console.log('recordPageVisit', pagePath);
    try {
      // 获取现有的统计数据
      const stats = this.getPageStats();
      
      // 增加访问次数
      stats[pagePath] = (stats[pagePath] || 0) + 1;
      
      // 保存到本地存储
      localStg.set(this.STORAGE_KEY, stats);
      
      console.log(`页面访问统计: ${pagePath} -> ${stats[pagePath]}次`);
    } catch (error) {
      console.error('记录页面访问失败:', error);
    }
  }

  /**
   * 获取页面访问统计
   * @returns 页面访问统计对象
   */
  static getPageStats(): Record<string, number> {
    try {
      const stats = localStg.get(this.STORAGE_KEY);
      return stats || {};
    } catch (error) {
      console.error('获取页面访问统计失败:', error);
      return {};
    }
  }

  /**
   * 获取指定页面的访问次数
   * @param pagePath 页面路径
   * @returns 访问次数
   */
  static getPageVisitCount(pagePath: string): number {
    const stats = this.getPageStats();
    return stats[pagePath] || 0;
  }

  /**
   * 清除所有页面访问统计
   */
  static clearPageStats(): void {
    try {
      localStg.remove(this.STORAGE_KEY);
      console.log('页面访问统计已清除');
    } catch (error) {
      console.error('清除页面访问统计失败:', error);
    }
  }

  /**
   * 获取访问次数最多的页面
   * @param limit 返回前N个页面，默认10个
   * @returns 按访问次数排序的页面数组
   */
  static getTopVisitedPages(limit: number = 10): Array<{ path: string; count: number }> {
    const stats = this.getPageStats();
    return Object.entries(stats)
      .map(([path, count]) => ({ path, count }))
      .sort((a, b) => b.count - a.count)
      .slice(0, limit);
  }

  /**
   * 获取总访问次数
   * @returns 总访问次数
   */
  static getTotalVisits(): number {
    const stats = this.getPageStats();
    return Object.values(stats).reduce((total, count) => total + count, 0);
  }
}

/**
 * 页面访问统计的 Hook
 * 用于在页面组件中自动记录访问
 */
export function usePageStats() {
  const recordVisit = (pagePath: string) => {
    PageStats.recordPageVisit(pagePath);
  };

  const getStats = () => {
    return PageStats.getPageStats();
  };

  const getVisitCount = (pagePath: string) => {
    return PageStats.getPageVisitCount(pagePath);
  };

  return {
    recordVisit,
    getStats,
    getVisitCount,
    clearStats: PageStats.clearPageStats,
    getTopVisitedPages: PageStats.getTopVisitedPages,
    getTotalVisits: PageStats.getTotalVisits
  };
}
